package com.demo.socketchannel;

import java.io.IOException;
import java.nio.channels.Selector;

/**
 * @author MT
 * @date 2019-12-10 11:25
 */
public class Util {

    // 进度条总长度
    private static final int barlen = 100;
    // 每1000毫秒打印一次
    private static final int timeout = 1000;
    // 计数器
    private static int i = 0;


    public static boolean select(Selector selector) {
        try {
            Util.printSchedule(i, barlen);
            if (selector.select(timeout) == 0) {
                setIIncreasing();
                return true;
            }
            resetI();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * i进行范围限定
     */
    private static void setIIncreasing() {
        i++;
        if (i > barlen) {
            for (int i = 0; i < barlen + 10; i++) {
                // 退格符，就是删除键
                // 删除原有进度
                System.out.print("\b");
            }
            i = 0;
        }
    }

    /**
     * 重置I为0
     */
    private static void resetI() {
        i = 0;
    }

    /**
     * 打印进度方法
     * 源码地址：http://googlevip8.com/post/112
     *
     * @param percent 当前进度
     * @param barLen  进度条总长度
     */
    private static void printSchedule(int percent, int barLen) {
        if (percent == 0) return;
        // 删除原有进度
        for (int i = 0; i < barLen + 10; i++) {
            // 退格符，就是删除键
            // 删除原有进度
            System.out.print("\b");
        }
        // 总进度/当前进度=进度条百分比
        int now = barLen * percent / 100;

        // 打印当前进度，░▒表示
        // 打印当前进度，>表示
        // 打印当前进度，.表示
        for (int i = 0; i < now; i++) {
            System.out.print(".");
        }
        // 打印剩余进度，空格表示
        for (int i = 0; i < barLen - now; i++) {
            System.out.print(" ");
        }
        // 打印当前进度百分比数字
        System.out.print("  " + percent + "秒");
    }
}
